
#include "nane/FileArchiveSystem/ZIP/ZIPFileArchiveSystem.h"
#include "nane/FileArchiveSystem/ZIP/ZIPFileArchive.h"
#include "nane/core/crt/filesystem.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ZIPFileArchiveSystem::ZIPFileArchiveSystem()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ZIPFileArchiveSystem::~ZIPFileArchiveSystem()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool ZIPFileArchiveSystem::Initialize()
    {
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void ZIPFileArchiveSystem::Shutdown()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const char* ZIPFileArchiveSystem::GetFileType()
    {
        return "zip";
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IFileArchive* ZIPFileArchiveSystem::CreateArchive( IInputSeekableRef* _input )
    {
        ZIPFileArchive* zipFileArchive = new ZIPFileArchive();
        if( zipFileArchive->Initialize(InputSeekablePtr(_input)) == false )
        {
            delete zipFileArchive;
            zipFileArchive = NULL;
        }
        return zipFileArchive;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IFileArchive* ZIPFileArchiveSystem::CreateArchive( const char* _filename )
    {
        ZIPFileArchive* zipFileArchive = new ZIPFileArchive();
        ReadFilePtr file = FileSystem::OpenReadFile(_filename);
        if( file == NullPtr || zipFileArchive->Initialize(file) == false )
        {
            delete zipFileArchive;
            zipFileArchive = NULL;
        }
        return zipFileArchive;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void ZIPFileArchiveSystem::ReleaseArchive( IFileArchive* _fileArchive )
    {
        ZIPFileArchive* zipFileArchive = static_cast<ZIPFileArchive*>(_fileArchive);
        zipFileArchive->Shutdown();
        delete zipFileArchive;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
